package com.whfc.ms.api.fmam.service;

import com.whfc.common.result.PageData;
import com.whfc.entity.dto.OssPathDTO;
import com.whfc.fmam.entity.dto.FmamPlanDTO;
import com.whfc.fmam.entity.dto.FmamPlanListCountDTO;
import com.whfc.fmam.entity.qo.FmamPlanAddQO;
import com.whfc.fmam.entity.qo.FmamPlanCheckQO;
import com.whfc.fmam.entity.qo.FmamPlanEditQO;
import com.whfc.fuum.entity.SysUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Date;

/**
 * @Author: ；likang
 * @Description: 物资计划审批
 * @Version：1.0
 */
public interface MatPlanService {

    /**
     * 查找材料计划列表
     *
     * @param user      用户
     * @param deptId    组织机构ID
     * @param pageNum   页码
     * @param pageSize  每页
     * @param type      查找类型  0-全部  1-我提交的  2-待处理的
     * @param states    计划状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 计划列表
     */
    PageData<FmamPlanDTO> matPlanList(SysUser user, Integer deptId, Integer pageNum, Integer pageSize, Integer type, String states, Date startDate, Date endDate);

    /**
     * 查找材料计划列表
     *
     * @param user      用户
     * @param deptId    组织机构ID
     * @param states    计划状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 计划列表
     */
    FmamPlanListCountDTO matPlanListCount(SysUser user, Integer deptId, String states, Date startDate, Date endDate);

    /**
     * 获取材料计划详情
     *
     * @param user
     * @param planId
     * @return
     */
    FmamPlanDTO matPlanDetail(SysUser user, Integer planId);

    /**
     * 新增材料计划
     *
     * @param user
     * @param request
     * @return
     */
    void addMatPlan(SysUser user, FmamPlanAddQO request);

    /**
     * 重填计划详情
     *
     * @param user
     * @param request
     * @return
     */
    void editMatPlan(SysUser user, FmamPlanEditQO request);

    /**
     * 审批材料审批
     *
     * @param user
     * @param request
     * @return
     */
    void checkMatPlan(SysUser user, FmamPlanCheckQO request);

    /**
     * 审批
     *
     * @param user
     * @param request
     */
    void check1(SysUser user, FmamPlanCheckQO request);

    /**
     * 复审
     *
     * @param user
     * @param request
     */
    void check2(SysUser user, FmamPlanCheckQO request);

    /**
     * 核验
     *
     * @param user
     * @param request
     */
    void check3(SysUser user, FmamPlanCheckQO request);

    /**
     * 删除材料计划
     *
     * @param planId 计划ID
     * @return
     */
    void delMatPlan(Integer planId);

    /**
     * 材料附件上传
     *
     * @param file
     * @return
     * @throws IOException
     */
    OssPathDTO uploadFile(MultipartFile file) throws IOException;
}
